package com.qf.qfcenterdata.listeners;

import com.alibaba.fastjson.JSON;
import com.qf.common.constant.KafkaConstant;
import com.qf.common.constant.RedisConstant;
import com.qf.common.model.DeviceModelValue;
import com.qf.qfcenterdata.service.MongoService;
import com.qf.qfcenterdata.service.RedisService;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@Component
public class DeviceDataListener {

    @Autowired
    private RedisService redisService;

    @Autowired
    private MongoService mongoService;

    @KafkaListener(topics = {KafkaConstant.DEVICE_DATA_TOPIC},groupId = KafkaConstant.DEVICE_DATA_GROUP)
    public void dataLis(ConsumerRecord record){
        String json = (String) record.value();

        System.out.println("=============" + json);

        DeviceModelValue deviceModelValue = JSON.parseObject(json, DeviceModelValue.class);

        //通过设备的类型标识，获取该设备对应的数据(假设我们这里收到的设备是温度监控设备--获取上报的温度值)
        Map<String, String> data = deviceModelValue.getData();
        String air_temperature = data.get("air_temperature");
        //对温度进行阈值判单（温度过高-->向降温的设备发送指令；温度过低-->向升温的设备发送指令）
        //控制的阈值需要大量的查询，而且还会随着季节/气候的不同，需要同步维护改变这个值，这个值最好存在redis中

        //将设备的数据存入到存储设备中（MongoDB），同时向redis中保存设备状态（10s上报一次，redis中存的这个设备状态的key的有效期 30s）

        //设备状态保存
        redisService.saveDeviceState(deviceModelValue);

        //设备上报数据信息的保存
        mongoService.saveDeviceModelValue(deviceModelValue);
    }
}
